One increasingly important application area for data processing units which are implemented as integrated circuits is three dimensional (3D) graphics. In 3D graphics objects to be displayed are divided into smaller fragments like polygons which are composed of pixels. Each pixel contains information of its colour and location as well as the value of the third dimension. Each pixel may also have other components, such as coordinates for its surface information and transparency Normally, all components of the pixel are first interpolated in the two-dimensional (2D) space. The linear interpolation, however, will cause distortion in case of perspective projection. We can obtain an approximate solution to this problem by decomposing polygons into smaller ones, or an exact solution, at greater cost, by performing perspective correction for the 2D values so as to take account the third dimension. The perspective correction is done by a division operation in which each pixel's flat 2D information is divided by pixel's perspective information which is same for all data components of the pixel. If the perspective correction is not carried out, different kinds of annoying artefacts will become visible.
Due to the high speed requirements, the division is normally implemented by integrated division circuits. However, in case a dedicated division unit and full bit width are employed for each component of the pixel, a huge amount of chip area and latency is required. Usually this leads in compromises, such as a partial perspective correction in which only few of pixel information components are corrected. In 3D graphics the pixel values (colours, texture, etc) are in the range of 6 to 12 bits when the interpolation is done with 32 or more bits.
Therefore, there is need to decrease the amount of the chip area and time needed for the perspective correction. To this end, there exists several algorithms to calculate the division f(a,b)=a/b. Both the dividend a and the divider b are scaled separately so that meaningless bits (zeros) are taken away starting from the most significant bits. The division itself is then done with these shrunk bit vectors. Upon division, the scaling information of the divider and the dividend have to be combined to compose the final result of the division.